package hottargui.domain.semi;

import hottargui.domain.*;
import hottargui.domain.alpha.*;
import hottargui.domain.beta.*;
import hottargui.domain.delta.*;
import hottargui.domain.gamma.*;
import hottargui.domain.standard.*;

public class SemiGameFactoryImpl implements GameFactory{

	private DeckOfCards _deck;
	private ShuffleStrategy _shuffleStrategy;

	public SemiGameFactoryImpl() {
		_shuffleStrategy = new StandardShuffleStrategyImpl();
		_deck = new GammaDeckOfCardsImpl(_shuffleStrategy);
	}

	public SemiGameFactoryImpl(DeckOfCards deck) {
		_deck = deck;
	}

	public Board createBoard() {
		return new StandardBoard(new DeltaBoardLayoutStrategyImpl());
	}

	public EndRoundStrategy createEndRoundStrategy(StateMachine sm) {
		return new GammaEndRoundStrategyImpl(sm, _deck);
	}

	public WinnerStrategy createWinnerStrategy(StateMachine sm) {
		return new SemiWinnerStrategyImpl(sm);
	}

	public RoundSequenceStrategy createRoundSequenceStrategy(StateMachine sm) {
		return new GammaRoundSequenceStrategyImpl(sm, _deck);
	}

	public PlaceUnitsStrategy createPlaceUnitsStrategy() {
		return new BetaPlaceUnitsStrategyImpl();
	}

	public AttackStrategy createAttackStrategy() {
		return new BetaAttackStrategyImpl();
	}

	public MoveToBuyStrategy createMoveToBuyStrategy() {
		return new AlphaMoveToBuyStrategyImpl();
	}

	public RollDiceStrategy createRollDiceStrategy() {
		return new StandardDiceStrategy();
	}

	public AfterDieRollActionStrategy createAfterDieRollActionStrategy(StateMachine sm) {
		return new SemiAfterDieRollActionStrategyImpl(sm,
				new GammaAfterDieRollActionStrategyImpl(sm,_shuffleStrategy),
				new BetaAfterDieRollActionStrategyImpl(sm));
	}

	public String getWindowTitle() {
		return "Hottargui Semi Variant";
	}

}
